<div class="refentry" lang="en" xml:lang="en"><a id="glLogicOp"></a><div class="titlepage"></div><div class="refnamediv"><h2>Name</h2><p>glLogicOp — specify a logical pixel operation for rendering</p></div><div class="refsynopsisdiv"><h2>C Specification</h2><div class="funcsynopsis"><p><code class="funcdef">void <b class="fsfunc">glLogicOp</b>(</code>GLenum <var class="pdparam">opcode</var><code>)</code>;</p></div></div><div class="refsect1" lang="en" xml:lang="en"><a id="parameters"></a><h2>Parameters</h2><div class="variablelist"><dl><dt><span class="term"><em class="parameter"><code>opcode</code></em></span></dt><dd><p>
                    Specifies a symbolic constant that selects a logical operation.
                    The following symbols are accepted:
                    <code class="constant">GL_CLEAR</code>,
                    <code class="constant">GL_SET</code>,
                    <code class="constant">GL_COPY</code>,
                    <code class="constant">GL_COPY_INVERTED</code>,
                    <code class="constant">GL_NOOP</code>,
                    <code class="constant">GL_INVERT</code>,
                    <code class="constant">GL_AND</code>,
                    <code class="constant">GL_NAND</code>,
                    <code class="constant">GL_OR</code>,
                    <code class="constant">GL_NOR</code>,
                    <code class="constant">GL_XOR</code>,
                    <code class="constant">GL_EQUIV</code>,
                    <code class="constant">GL_AND_REVERSE</code>,
                    <code class="constant">GL_AND_INVERTED</code>,
                    <code class="constant">GL_OR_REVERSE</code>, and
                    <code class="constant">GL_OR_INVERTED</code>. The initial value is <code class="constant">GL_COPY</code>.
                </p></dd></dl></div></div><div class="refsect1" lang="en" xml:lang="en"><a id="description"></a><h2>Description</h2><p>
            <code class="function">glLogicOp</code> specifies a logical operation that,
            when enabled,
            is applied between the incoming RGBA color
            and the RGBA color at the corresponding location in the
            frame buffer.
            To enable or disable the logical operation, call
            <a href="glEnable"><span class="citerefentry"><span class="refentrytitle">glEnable</span></span></a> and <a href="glDisable"><span class="citerefentry"><span class="refentrytitle">glDisable</span></span></a>
            using the symbolic constant <code class="constant">GL_COLOR_LOGIC_OP</code>. The initial value is
            disabled.
        </p><p>
        </p><div class="informaltable"><table><colgroup><col /><col /></colgroup><thead><tr><th><span class="bold"><strong>
                        Opcode
                        </strong></span></th><th><span class="bold"><strong>
                        Resulting Operation
                        </strong></span></th></tr></thead><tbody><tr><td>
                        <code class="constant">GL_CLEAR</code>
                        </td><td class="center">
                        0
                        </td></tr><tr><td>
                        <code class="constant">GL_SET</code>
                        </td><td class="center">
                        1
                        </td></tr><tr><td>
                        <code class="constant">GL_COPY</code>
                        </td><td class="center">
                        s
                        </td></tr><tr><td>
                        <code class="constant">GL_COPY_INVERTED</code>
                        </td><td class="center">
                        ~s
                        </td></tr><tr><td>
                        <code class="constant">GL_NOOP</code>
                        </td><td class="center">
                        d
                        </td></tr><tr><td>
                        <code class="constant">GL_INVERT</code>
                        </td><td class="center">
                        ~d
                        </td></tr><tr><td>
                        <code class="constant">GL_AND</code>
                        </td><td class="center">
                        s &amp; d
                        </td></tr><tr><td>
                        <code class="constant">GL_NAND</code>
                        </td><td class="center">
                        ~(s &amp; d)
                        </td></tr><tr><td>
                        <code class="constant">GL_OR</code>
                        </td><td class="center">
                        s | d
                        </td></tr><tr><td>
                        <code class="constant">GL_NOR</code>
                        </td><td class="center">
                        ~(s | d)
                        </td></tr><tr><td>
                        <code class="constant">GL_XOR</code>
                        </td><td class="center">
                        s ^ d
                        </td></tr><tr><td>
                        <code class="constant">GL_EQUIV</code>
                        </td><td class="center">
                        ~(s ^ d)
                        </td></tr><tr><td>
                        <code class="constant">GL_AND_REVERSE</code>
                        </td><td class="center">
                        s &amp; ~d
                        </td></tr><tr><td>
                        <code class="constant">GL_AND_INVERTED</code>
                        </td><td class="center">
                        ~s &amp; d
                        </td></tr><tr><td>
                        <code class="constant">GL_OR_REVERSE</code>
                        </td><td class="center">
                        s | ~d
                        </td></tr><tr><td>
                        <code class="constant">GL_OR_INVERTED</code>
                        </td><td class="center">
                        ~s | d
                        </td></tr></tbody></table></div><p>
            <em class="parameter"><code>opcode</code></em> is a symbolic constant chosen from the list above.
            In the explanation of the logical operations,
            <span class="emphasis"><em>s</em></span> represents the incoming color and
            <span class="emphasis"><em>d</em></span> represents the color in the frame buffer.
            Standard C-language operators are used.
            As these bitwise operators suggest,
            the logical operation is applied independently to each bit pair of the
            source and destination colors.
        </p></div><div class="refsect1" lang="en" xml:lang="en"><a id="notes"></a><h2>Notes</h2><p>
            When more than one RGBA color buffer is enabled for drawing,
            logical operations are performed separately for each enabled buffer,
            using for the destination value the contents of that buffer
            (see <a href="glDrawBuffer"><span class="citerefentry"><span class="refentrytitle">glDrawBuffer</span></span></a>).
        </p><p>
            Logic operations have no effect on floating point draw buffers. However, if
            <code class="constant">GL_COLOR_LOGIC_OP</code> is enabled, blending is still disabled
            in this case.
        </p></div><div class="refsect1" lang="en" xml:lang="en"><a id="errors"></a><h2>Errors</h2><p>
            <code class="constant">GL_INVALID_ENUM</code> is generated if <em class="parameter"><code>opcode</code></em> is not an accepted value.
        </p></div><div class="refsect1" lang="en" xml:lang="en"><a id="associatedgets"></a><h2>Associated Gets</h2><p>
            <a href="glGet"><span class="citerefentry"><span class="refentrytitle">glGet</span></span></a> with argument <code class="constant">GL_LOGIC_OP_MODE</code>.
        </p><p>
            <a href="glIsEnabled"><span class="citerefentry"><span class="refentrytitle">glIsEnabled</span></span></a> with argument <code class="constant">GL_COLOR_LOGIC_OP</code>.
        </p></div>
        {$pipelinestall}{$examples}
        <div class="refsect1" lang="en" xml:lang="en"><a id="seealso"></a><h2>See Also</h2><p>
            <a href="glBlendFunc"><span class="citerefentry"><span class="refentrytitle">glBlendFunc</span></span></a>,
            <a href="glDrawBuffer"><span class="citerefentry"><span class="refentrytitle">glDrawBuffer</span></span></a>,
            <a href="glEnable"><span class="citerefentry"><span class="refentrytitle">glEnable</span></span></a>,
            <a href="glStencilOp"><span class="citerefentry"><span class="refentrytitle">glStencilOp</span></span></a>
        </p></div><div class="refsect1" lang="en" xml:lang="en"><div id="Copyright"><h2>Copyright</h2><p>
            Copyright © 1991-2006
            Silicon Graphics, Inc. This document is licensed under the SGI
            Free Software B License. For details, see
            <a href="https://web.archive.org/web/20171022161616/http://oss.sgi.com/projects/FreeB/" target="_top">https://web.archive.org/web/20171022161616/http://oss.sgi.com/projects/FreeB/</a>.
        </p></div></div></div>
